#include "gerenciaMatriz.h"
#include <stdio.h>
#include <stdlib.h>

#define ERRO -1



//Aloca espaco de memoria para uma matriz
int **alocaMatriz(int dim) {
   int **mat; //matriz que sera retornada
   int i, j;    //variaveis auxiliares

   //aloca o espaco de memoria para a matriz de dimensao dxd
   mat = (int**) calloc(dim, sizeof(int *));
   if (mat == NULL) {
       printf ("Erro de alocacao de memoria");
       return NULL;
   }
   for (i = 0; i < dim; i++) {
      mat[i] = (int*) calloc(dim, sizeof(int));
      if (mat[i] == NULL) {
         printf ("Erro de alocacao de memoria");
         return NULL;
      }
   }
   return mat; //retorna o ponteiro para a matriz
}


void alocarMatriz(int **mat, int dim) {
   int i, j;    //variaveis auxiliares

   //aloca o espaco de memoria para a matriz de dimensao dxd
   mat = (int**) calloc(dim, sizeof(int *));
   if (mat == NULL) {
       printf ("Erro de alocacao de memoria");
       exit(ERRO);
   }
   for (i = 0; i < dim; i++) {
      mat[i] = (int*) calloc(dim, sizeof(int));
      if (mat[i] == NULL) {
         printf ("Erro de alocacao de memoria");
         exit (ERRO);
      }
   }
}

//Carrega uma matriz de um arquivo de entrada
int **carregaMatriz(int dim) {
   int **mat; //matriz que sera retornada
   int i, j;    //variaveis auxiliares

   //aloca espaco de memoria para a matriz
   mat = alocaMatriz(dim);

   //le a matriz do arquivo de entrada padrao
   for (i = 0; i < dim; i++) {
      for (j = 0; j < dim; j++) {
         fscanf(entrada, "%d", &mat[i][j]);
      }
   }
   return mat; //retorna o ponteiro para a matriz
}

void carregarMatriz(int **mat, int dim) {
   int i, j;    //variaveis auxiliares

   //le a matriz do arquivo de entrada padrao
   for (i = 0; i < dim; i++) {
      for (j = 0; j < dim; j++) {
         fscanf(entrada, "%d", &mat[i][j]);
      }
   }
}
